home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-29 | 12.8 KB | 2,023 lines |
- ;----------------------------------------------------------------------------
- ; Copyright(C) 1996, CyZ/Peanuts
- ;----------------------------------------------------------------------------
- ;
- ; FUNCTION Read()
- ;
- ; Advanced input line function handling Insert mode, del, Home, end, etc...
- ;
- ; Courtesy of CyZ/Peanuts
- ;----------------------------------------------------------------------------
- #lib
- #nouser
-
- Declare Function Read(Integer X, Integer Y, Integer LENGTH, Boolean WWRAP) String
-
-
- ;----------------------------------------------------------------------------
- Function Read(Integer X, Integer Y, Integer LENGTH, Boolean WWRAP) String
-
- INTEGER MAX, I
- BOOLEAN EX, INS
- STRING KEYREAD
- BIGSTR TEMP
-
- STRING C1, C2, C3, C4
-
- ;░▒▓█ VARIABLE INITIALISATION █▓▒░
-
- C1="@X0F"
- C2="@X07"
- C3="@X08"
- C4="@X03"
- EX=0
-
- ;░▒▓█ THE MIGHTY BUGFIX - POSITION CURSOR █▓▒░
-
- ANSIPOS X,Y
-
- ;░▒▓█ CHECK FOR WORDWRAP █▓▒░
-
- IF (GETENV("WRAP")<>"") THEN
- PRINT GETENV("WRAP")
- MAX=X+LEN(STRIPATX(GETENV("WRAP")))
- SETENV ("WRAP=")
- ELSE
- MAX=X
-
- ENDIF
-
-
- ;░▒▓█ GET USER INPUT █▓▒░
-
- While ( ex=0 ) do
-
- KEYREAD="" : WHILE (KEYREAD="") KEYREAD=INKEY()
-
- ;░▒▓█ INSERT MODUS █▓▒░
-
- IF (KEYREAD="INS") THEN
- IF (INS=0) THEN INS=1
- ELSE INS=0
- ENDIF
- ENDIF
-
- ;░▒▓█ CHECK FOR SPECIAL KEYS █▓▒░
-
- IF ((KEYREAD="DEL")&(MAX<>GETX())) THEN
- TEMP=GETX()
- PRINT SCRTEXT(GETX()+1,Y,MAX-GETX(),1)
- I=MAX-TEMP
- BACKUP I
- DEC MAX
- ENDIF
-
-
- IF (KEYREAD="HOME") THEN
- backup getx()-x
- ENDIF
-
- IF (KEYREAD="END") THEN
- FORWARD MAX-GETX()
- ENDIF
-
- IF (KEYREAD="LEFT") THEN
- IF (GETX()>X) BACKUP 1
- ENDIF
-
- IF (KEYREAD="RIGHT") THEN
- IF ( (GETX()<MAX) & (GETX()-X<LENGTH)) FORWARD 1
- ENDIF
-
-
- ;░▒▓█ THE FAMOUS WRAPPING ROUTINE █▓▒░
-
- If ( (MAX=X+LENGTH) & (WWRAP=1) & (len(keyread)=1) & (asc(keyread)>27)) Then
- TEMP=""
- ; ░▒▓█ SAVE WRAP STRING █▓▒░
-
- WHILE (SCRTEXT(X+LENGTH-1-I,Y,1,0)<>" ") INC I
- IF (I<LENGTH) THEN
- TEMP=SCRTEXT(X+LENGTH-I,Y,I,1)
-
- SELECT CASE (ASC(KEYREAD))
-
- Case 28..31, 33..47, 58..64, 91..96, 123..255
- KEYREAD=C3+KEYREAD
-
- Case 48..57
- KEYREAD=C4+KEYREAD
-
- Case 65..90
- KEYREAD=C1+KEYREAD
-
- Case 97..122
- KEYREAD=C2+KEYREAD
-
- END SELECT
-
- TEMP="WRAP="+STRING(TEMP)+STRING(KEYREAD)
- SETENV (TEMP)
- KEYREAD=""
-
- ; ░▒▓█ UPDATE DISPLAY █▓▒░
- IF (X+LENGTH<>GETX()) FORWARD X+LENGTH-GETX()
- BACKUP I
- PRINT SPACE(I+1)
- EX=1
- ENDIF
- ENDIF
-
- ;░▒▓█ THE FAMOUS WRAPPING ROUTINE ENDS HERE █▓▒░
-
- ;░▒▓█ CHECK FOR CHARS █▓▒░
-
- IF (LEN(KEYREAD)>1) KEYREAD=""
-
-
- Select Case (asc(keyread))
-
- Case 8
-
-
- IF (!(GETX()=X)) THEN
- IF (MAX=GETX()) THEN
- BACKUP 1
- PRINT " "
- BACKUP 1
- DEC MAX
- ELSE
- BACKUP 1
- I=X+LENGTH-GETX()+1
- PRINT SCRTEXT(GETX()+1,Y,I,1)+" "
- DEC MAX
- BACKUP I+1
- ENDIF
- ENDIF
-
-
-
-
-
- Case 13
-
- ex=1
-
-
- Case 0..28
-
- keyread=""
-
-
- Case 32
-
-
- IF (!(MAX>=LENGTH+X)) THEN
-
- IF (INS) THEN
-
- TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
- PRINT " "+TEMP
- backup len(stripatx(temp))
- inc max
-
- ELSE
-
- PRINT " "
- IF (GETX()>MAX) MAX=GETX()
- ENDIF
-
- ENDIF
-
-
-
-
-
-
- Case 28..31, 33..47, 58..64, 91..96, 123..255
-
- IF (!(MAX>=LENGTH+X)) THEN
-
- IF (INS) THEN
-
- TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
- PRINT C3+KEYREAD+TEMP
- backup len(stripatx(temp))
- inc max
-
- ELSE
-
- PRINT C3+KEYREAD
- IF (GETX()>MAX) MAX=GETX()
- ENDIF
-
- ENDIF
-
- Case 48..57
-
- IF (!(MAX>=LENGTH+X)) THEN
-
- IF (INS) THEN
-
- TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
- PRINT C4+KEYREAD+TEMP
- backup len(stripatx(temp))
- inc max
-
- ELSE
-
- PRINT C4+KEYREAD
- IF (GETX()>MAX) MAX=GETX()
- ENDIF
-
- ENDIF
-
- Case 65..90
-
- IF (!(MAX>=LENGTH+X)) THEN
-
- IF (INS) THEN
-
- TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
- PRINT C1+KEYREAD+TEMP
- backup len(stripatx(temp))
- inc max
-
- ELSE
-
- PRINT C1+KEYREAD
- IF (GETX()>MAX) MAX=GETX()
- ENDIF
-
- ENDIF
-
- Case 97..122
-
- IF (!(MAX>=LENGTH+X)) THEN
-
- IF (INS) THEN
-
- TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
- PRINT C2+KEYREAD+TEMP
- backup len(stripatx(temp))
- inc max
-
- ELSE
-
- PRINT C2+KEYREAD
- IF (GETX()>MAX) MAX=GETX()
- ENDIF
-
- ENDIF
-
-
-
- End select
-
- endwhile
-
- ;░▒▓█ SAVE STRING! █▓▒░
-
-
- READ=SCRTEXT(x,y,max-x,0)
-
- ; If you need to save the string WITH colors, change the last SCRTEXT
- ; Parameter to ,1 AND change both function declarations to
- ; BIGSTRING:
- ;
- ; DECLARE FUNCTION READ(INTEGER X, INTEGER Y, INTEGER LENGTH, BOOLEAN WWRAP) BIGSTR
- ; FUNCTION READ(INTEGER X, INTEGER Y, INTEGER LENGTH, BOOLEAN WWRAP) BIGSTR
- ;
-
- endfunc
-
-
-
-
- ;░▒▓█ HOW TO SETUP A NEW COLOR █▓▒░
- ;
- ; CASE XXX (XXX can be any ascii array, 31..44, etc...)
- ;
- ; IF (!(MAX>=LENGTH+X)) THEN
- ;
- ; IF (INS) THEN
- ;
- ; TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
- ; PRINT CX+KEYREAD+TEMP
- ;
- ; * CX is the Color Code, type "@X" codes or declare the
- ; * Variable in the DECLARE and INITIALIZE Variables Section
- ;
- ; backup len(stripatx(temp))
- ; inc max
- ;
- ; ELSE
- ;
- ; PRINT CX+KEYREAD
- ; IF (GETX()>MAX) MAX=GETX()
- ; ENDIF
- ;
- ; ENDIF
- ;
- ; DOn't forget to adjust the wordwrapping routine also!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-